package de.fhpotsdam.unfolding.examples.multi;

import processing.core.PApplet;

import de.fhpotsdam.unfolding.UnfoldingMap;
import de.fhpotsdam.unfolding.geo.Location;
import de.fhpotsdam.unfolding.providers.Microsoft;
import de.fhpotsdam.unfolding.utils.MapUtils;

/**
 * Overlays two different map areas depicting the same earth areas. Apparently some satellite images must have been
 * inserted at the wrong position. This is on Microsoft Satellite, as well as on Google Satellite.
 * 
 * <p>
 * ctrl + mouse move to change the alpha level of the top map. Press 'a' and 'd' to rotate (in order to align both
 * maps.)
 * </p>
 */
public class MapErrorComparisonApp extends PApplet {

	UnfoldingMap map1;
	UnfoldingMap map2;
	float fadeValue = 100;

	public void setup() {
		size(800, 600, OPENGL);

		map1 = new UnfoldingMap(this, "map1", new Microsoft.AerialProvider());
		map2 = new UnfoldingMap(this, "map2", new Microsoft.AerialProvider());
		MapUtils.createDefaultEventDispatcher(this, map1, map2);

		map1.zoomAndPanTo(new Location(56.27415, 130.97737), 13);
		map2.zoomAndPanTo(new Location(55.99591, 131.3102), 13);
	}

	public void draw() {
		background(0);

		tint(255);
		map1.draw();
		tint(255, fadeValue);
		map2.draw();
	}

	public void mouseMoved() {
		if (keyPressed && key == CODED && keyCode == CONTROL) {
			float d = (float) mouseX / (float) width;
			fadeValue = map(d, 0, 1, 0, 255);
		}
	}

	public void keyPressed() {
		if (key == 'a') {
			map2.rotate(0.02f);
		}
		if (key == 'd') {
			map2.rotate(-0.02f);
		}

	}
}
